package com.java.tutorials.spring.BeanPropertySqlParameterSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;

import javax.sql.DataSource;
import java.util.Date;
/**
 * Created by xuzhike on 2016/3/13.
 * http://www.java2s.com/Code/Java/Spring/SqlParameterSourceSimpleJdbcTemplateBeanPropertySqlParameterSource.htm
 * SqlParameterSource, SimpleJdbcTemplate, BeanPropertySqlParameterSource
 */
class Main {
    public static void main(String args[]) throws Exception {
        ApplicationContext ac = new ClassPathXmlApplicationContext("context.xml", Main.class);
        DataSource dataSource = (DataSource) ac.getBean("dataSource");
        // DataSource mysqlDataSource = (DataSource) ac.getBean("mysqlDataSource");

        SimpleJdbcTemplate jdbcTemplate = new SimpleJdbcTemplate(dataSource);

        int count = 1000;
        SqlParameterSource[] source = new SqlParameterSource[count];
        for (int i = 0; i < count; i++) {
            Customer c = new Customer();
            c.setId(i + 100L);
            c.setFirstName("FN #" + i);
            c.setLastName("LN #" + i);
            c.setLastLogin(new Date());
            source[i] = new BeanPropertySqlParameterSource(c);
        }
        jdbcTemplate.batchUpdate(
                "insert into customer (id, first_name, last_name, last_login, comments) "
                        + "values (:id, :firstName, :lastName, :lastLogin, :comments)", source);

    }
}

class Customer {
    private Long id;

    private String firstName;

    private String lastName;

    private Date lastLogin;

    private String comments;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Date getLastLogin() {
        return lastLogin;
    }

    public void setLastLogin(Date lastLogin) {
        this.lastLogin = lastLogin;
    }

    public String getComments() {
        return comments;
    }

    public void setComments(String comments) {
        this.comments = comments;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder();
        sb.append("Customer");
        sb.append("{id=").append(id);
        sb.append(", firstName='").append(firstName).append('\'');
        sb.append(", lastName='").append(lastName).append('\'');
        sb.append(", lastLogin=").append(lastLogin);
        sb.append(", comments='").append(comments).append('\'');
        sb.append('}');
        return sb.toString();
    }
}
